package hui.com.util;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.concurrent.TimeUnit;

/**
 * @author mclt2017
 * @date 2021年06月28日 15:22
 */
@Component
public class RedisUtil {

  @Autowired
  private RedisTemplate redisTemplate;


  private static RedisUtil redisUtils ;

  @PostConstruct
  public void init(){
    redisUtils = this ;
    redisUtils.redisTemplate = this.redisTemplate ;
  }

  /**
   * redis存入数据
   * @param key 键名
   * @param value  值
   * @param time 保存时间
   * @param timeUnit  时间单位 TimeUnit.SECONDS（秒）、TimeUnit.HOURS（小时）等。
   * */
  public static void saveValue(String key, Object value, int time, TimeUnit timeUnit){
    try {
      // 使用Jackson库将对象转换为JSON字符串
      ObjectMapper objectMapper = new ObjectMapper();
      String jsonString = objectMapper.writeValueAsString(value);

      // 存储JSON字符串到Redis
      redisUtils.redisTemplate.opsForValue().set(key,value,time,timeUnit);
    } catch (JsonProcessingException e) {
      // 处理异常，例如日志记录或抛出自定义异常
      e.printStackTrace();
    }

  }

  /**
   * 获取redis中的值
   * @param key 键名
   * */
  public static <T> T getValue(String key){
    ValueOperations<String,T> valueOperations = redisUtils.redisTemplate.opsForValue();
    return valueOperations.get(key);
  }

  /**
   * 删除单个对象
   * @param key 键名
   * */
  public static  boolean deleteValue(String key){
    return  redisUtils.redisTemplate.delete(key);
  }
}